﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos
Imports System.Transactions

Public Class SucursalesBL

    Public Function RegistrarSucursal(ByVal TokenConexion As String, ByVal sucursal As SucursalesBE, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        If (EsValidoParaRegistraryActualizar(sucursal, detResp.Mensajes)) Then
            Dim sucursalDAL As SucursalesDAL = New SucursalesDAL("")
            Try
                TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
                sucursalDAL = New SucursalesDAL(TokenConexion)
                If (sucursalDAL.existeSucursal(sucursal.ClaveSucursal)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_PreviamenteRegistrado,
                                             "Existe un registro con la Clave de sucursal indicada" & vbCrLf & detResp.Mensajes)
                    Return False
                Else
                    If (sucursalDAL.registraSucursales(sucursal)) Then
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "")
                        Return True
                    Else
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueRegistrado,
                                                 "La Sucursal no pudo ser registrada en el sistema" & vbCrLf & detResp.Mensajes)
                        Return False
                    End If
                End If
            Catch ex As Exception
                Log.LogException(ex, "SucursalesBL.RegistrarSucursal")
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al registrar Sucursal: " & ex.Message)
                Return False
            Finally
                sucursalDAL = Nothing
            End Try
        Else
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                     "La Sucursal no es valida para registrar: " & vbCrLf & detResp.Mensajes)
            Return False
        End If
    End Function

    Public Function ActualizaSucursal(ByVal TokenConexion As String, ByVal sucursal As SucursalesBE, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim sucursalDAL As SucursalesDAL = New SucursalesDAL("")
        Try
            If (EsValidoParaRegistraryActualizar(sucursal, detResp.Mensajes)) Then
                TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
                sucursalDAL = New SucursalesDAL(TokenConexion)
                If (sucursalDAL.actualizaSucursales(sucursal)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "Datos Sucursal Actualizados.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de Datos Sucursal: " & vbCrLf &
                                             "No existe registro de Sucursal <" & sucursal.ClaveSucursal & ">" & vbCrLf &
                                             detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                     "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "SucursalesBL.ActualizaSucursal")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizar Sucursal: " & ex.Message)
            Return False
        Finally
            sucursalDAL = Nothing
        End Try
    End Function

    Public Function CambiaEstatusSucursal(ByVal TokenConexion As String, ByVal nombreSuc As String,
                                          ByVal setActivo As Boolean, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim sucursalDAL As SucursalesDAL = New SucursalesDAL("")
        Try
            If (Not String.IsNullOrEmpty(nombreSuc)) Then
                TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
                sucursalDAL = New SucursalesDAL(TokenConexion)
                If (sucursalDAL.cambiaEstatusPorClaveSucursal(nombreSuc, setActivo)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "Estatus de Sucursal Actualizado.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización del estatus de la Sucursal: " & vbCrLf &
                                             "No existe registro de Sucursal <" & nombreSuc & ">" & vbCrLf &
                                             detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                     "La informacion no es valida para actualizar: " & vbCrLf &
                                     "El Nombre de la Sucursal es obligatorio, no puede ir el campo vacio." & vbCrLf)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "SucursalesBL.CambiaEstatusSucursal")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizar estatus de Sucursal: " & ex.Message)
            Return False
        Finally
            sucursalDAL = Nothing
        End Try
    End Function

    Private Function EsValidoParaRegistraryActualizar(ByRef pSucursal As SucursalesBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrWhiteSpace(pSucursal.ClaveSucursal)) Then
                mensaje &= "La Clave de la Sucursal es obligatorio, no puede ir el campo vacío." & vbCrLf
            Else
                pSucursal.ClaveSucursal = pSucursal.ClaveSucursal.Trim
            End If

            If (String.IsNullOrWhiteSpace(pSucursal.NombreSucursal)) Then
                mensaje &= "El Nombre de la Sucursal es obligatorio, no puede ir el campo vacio." & vbCrLf
            Else
                pSucursal.NombreSucursal = pSucursal.NombreSucursal.Trim
                If (pSucursal.NombreSucursal.Length > 255) Then
                    pSucursal.NombreSucursal = pSucursal.NombreSucursal.Trim.Substring(0, 255)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.Calle)) Then
                pSucursal.Calle = pSucursal.Calle.Trim
                If (pSucursal.Calle.Length > 255) Then
                    pSucursal.Calle = pSucursal.Calle.Trim.Substring(0, 255)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.NumExterior)) Then
                pSucursal.NumExterior = pSucursal.NumExterior.Trim
                If (pSucursal.NumExterior.Length > 255) Then
                    pSucursal.NumExterior = pSucursal.NumExterior.Trim.Substring(0, 255)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.NumInterior)) Then
                pSucursal.NumInterior = pSucursal.NumInterior.Trim
                If (pSucursal.NumInterior.Length > 255) Then
                    pSucursal.NumInterior = pSucursal.NumInterior.Trim.Substring(0, 255)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.Colonia)) Then
                pSucursal.Colonia = pSucursal.Colonia.Trim
                If (pSucursal.Colonia.Length > 255) Then
                    pSucursal.Colonia = pSucursal.Colonia.Trim.Substring(0, 255)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.Localidad)) Then
                pSucursal.Localidad = pSucursal.Localidad.Trim
                If (pSucursal.Localidad.Length > 255) Then
                    pSucursal.Localidad = pSucursal.Localidad.Trim.Substring(0, 255)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.Referencia)) Then
                pSucursal.Referencia = pSucursal.Referencia.Trim
                If (pSucursal.Referencia.Length > 255) Then
                    pSucursal.Referencia = pSucursal.Referencia.Trim.Substring(0, 255)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.Municipio)) Then
                pSucursal.Municipio = pSucursal.Municipio.Trim
                If (pSucursal.Municipio.Length > 255) Then
                    pSucursal.Municipio = pSucursal.Municipio.Trim.Substring(0, 255)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.Estado)) Then
                pSucursal.Estado = pSucursal.Estado.Trim
                If (pSucursal.Estado.Length > 255) Then
                    pSucursal.Estado = pSucursal.Estado.Trim.Substring(0, 255)
                End If
            End If

            If (String.IsNullOrWhiteSpace(pSucursal.Pais)) Then
                mensaje &= "El Pais del Domicilio de la Sucursal es obligatorio." & vbCrLf
            Else
                pSucursal.Pais = pSucursal.Pais.Trim
                If (pSucursal.Pais.Length > 255) Then
                    pSucursal.Pais = pSucursal.Pais.Trim.Substring(0, 255)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.CP)) Then
                pSucursal.CP = pSucursal.CP.Trim
                If (Not csValidaciones.esCodigoPostalValido(pSucursal.CP)) Then
                    mensaje &= String.Format("El Código Postal <{0}> de la Sucursal debe ser de 5 dígitos", pSucursal.CP) & vbCrLf
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.Telefono)) Then
                pSucursal.Telefono = pSucursal.Telefono.Trim
            End If

            If Not (String.IsNullOrWhiteSpace(pSucursal.Correo)) Then
                pSucursal.Correo = pSucursal.Correo.Trim
                If (Not (csValidaciones.esCorreoValido(pSucursal.Correo))) Then
                    mensaje &= String.Format("Dirección de Correo Electrónico <{0}> no válido", pSucursal.Correo) & vbCrLf
                End If
            End If

            If (Not String.IsNullOrWhiteSpace(pSucursal.ClavePemex)) Then
                pSucursal.ClavePemex = pSucursal.ClavePemex.Trim
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "SucursalBL.EsValidoParaRegistraryActualizar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function GetSucursal(ByVal tokenConexion As String, ByVal ClaveSuc As String, ByRef detResp As DetalleRespuesta) As SucursalesBE
        detResp.Mensajes = ""
        Dim sucursalDAL As SucursalesDAL = New SucursalesDAL("")
        Dim sucursalBE As SucursalesBE
        Try
            If (EsValidoParaGetSucursal(ClaveSuc, detResp.Mensajes)) Then
                tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
                sucursalDAL = New SucursalesDAL(tokenConexion)
                sucursalBE = sucursalDAL.getSucursal(ClaveSuc)
                If (sucursalBE IsNot Nothing) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Se obtuvo la información de la sucursal con éxito.")
                    Return sucursalBE
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                                 "No se obtuvo la información de la Sucursal" & vbCrLf & detResp.Mensajes)
                    Return Nothing
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "Valor inválido para Clave de Sucursal <" & ClaveSuc & "> " & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "SucursalesBL.GetSucursal")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al obtener datos de la sucursal: " & ex.Message)
            Return Nothing
        Finally
            sucursalDAL = Nothing
        End Try
    End Function

    Private Function EsValidoParaGetSucursal(ByRef ClaveSuc As String, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrWhiteSpace(ClaveSuc)) Then
                mensaje &= "La Clave de la sucursal es obligatorio, no puede ir el campo vacio." & vbCrLf
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "SucursalesBL.EsValidoParaGetSucursal")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function GetListadoSucursales(ByVal tokenConexion As String, ByVal strNombreSuc As String,
                                         ByVal tipoStatus As Enumeraciones.estatusParaBusquedas, ByRef detResp As DetalleRespuesta) As List(Of SucursalesBE)
        detResp.Mensajes = ""
        Dim sucursalDAL As SucursalesDAL = New SucursalesDAL("")
        Dim listsucursalBE As List(Of SucursalesBE)
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            sucursalDAL = New SucursalesDAL(tokenConexion)
            listsucursalBE = sucursalDAL.getlistadoSucursales(strNombreSuc, tipoStatus)
            If (listsucursalBE IsNot Nothing) Then
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                         "Se obtuvo el listado de las sucursales con éxito.")
                Return listsucursalBE
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoObtuvoRegistrosParaListado,
                                                 "No se obtuvo el listado de las Sucursales" & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "SucursalesBL.GetListadoSucursales")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al obtener el listado de sucursales: " & ex.Message)
            Return Nothing
        Finally
            sucursalDAL = Nothing
        End Try
    End Function

End Class
